package com.clever.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clever.bean.model.OnlineUser;

import java.util.List;

import com.clever.bean.shopping.ChatMessage;
import com.clever.bean.shopping.projo.output.ChatMessageDetailVO;
import org.apache.ibatis.annotations.Param;

/**
 * 聊天记录表服务接口
 *
 * @Author xixi
 * @Date 2024-04-08 11:11:31
 */
public interface ChatMessageService {
    /**
     * 获取会话消息
     *
     * @param senderId   发送者id
     * @param receiverId 接收者id
     */
    List<ChatMessageDetailVO> selectMessageDetailList(String senderId, String receiverId);

    /**
     * 阅读消息
     *
     * @param senderId 发送者id
     */
    void read(String senderId, OnlineUser onlineUser);

    /**
     * 发送消息
     *
     * @param senderId   发送者id
     * @param receiverId 接收者id
     * @param message    消息
     */
    ChatMessageDetailVO send(String senderId, String receiverId, String message);

    /**
     * 分页查询列表
     *
     * @param pageNumber 页码
     * @param pageSize   每页记录数
     * @param senderId   发送者
     * @param receiverId 接收者
     * @return Page<ChatMessage>
     */
    Page<ChatMessage> selectPage(Integer pageNumber, Integer pageSize, String senderId, String receiverId);

    /**
     * 根据id获取聊天记录表
     *
     * @param id id
     * @return ChatMessage id信息
     */
    ChatMessage selectById(String id);

    /**
     * 根据发送者获取列表
     *
     * @param senderId 发送者
     * @return List<ChatMessage> 聊天记录表列表
     */
    List<ChatMessage> selectListBySenderId(String senderId);

    /**
     * 根据接收者获取列表
     *
     * @param receiverId 接收者
     * @return List<ChatMessage> 聊天记录表列表
     */
    List<ChatMessage> selectListByReceiverId(String receiverId);

    /**
     * 新建聊天记录表
     *
     * @param chatMessage 聊天记录表实体信息
     * @param onlineUser  当前登录用户
     * @return ChatMessage 新建后的聊天记录表信息
     */
    ChatMessage create(ChatMessage chatMessage, OnlineUser onlineUser);

    /**
     * 修改聊天记录表
     *
     * @param chatMessage 聊天记录表实体信息
     * @param onlineUser  当前登录用户
     * @return ChatMessage 修改后的聊天记录表信息
     */
    ChatMessage update(ChatMessage chatMessage, OnlineUser onlineUser);

    /**
     * 保存聊天记录表
     *
     * @param chatMessage 聊天记录表实体信息
     * @param onlineUser  当前登录用户
     * @return ChatMessage 保存后的聊天记录表信息
     */
    ChatMessage save(ChatMessage chatMessage, OnlineUser onlineUser);

    /**
     * 根据id删除信息
     *
     * @param id         id
     * @param onlineUser 当前登录用户
     */
    void delete(String id, OnlineUser onlineUser);

    /**
     * 根据id列表删除信息
     *
     * @param ids        id列表
     * @param onlineUser 当前登录用户
     */
    void deleteBatchIds(List<String> ids, OnlineUser onlineUser);

    /**
     * 根据发送者删除
     *
     * @param senderId   发送者
     * @param onlineUser 当前登录用户
     */
    void deleteBySenderId(String senderId, OnlineUser onlineUser);

    /**
     * 根据接收者删除
     *
     * @param receiverId 接收者
     * @param onlineUser 当前登录用户
     */
    void deleteByReceiverId(String receiverId, OnlineUser onlineUser);

}
